import { createRouter, createWebHashHistory } from 'vue-router'
import { useUserStore } from '@/stores/user'

import UnifiedLogin from '@/components/user/UnifiedLogin.vue'

// 页面组件
import HomePage from '@/pages/HomePage.vue'
import NovelDetailPage from '@/pages/NovelDetailPage.vue'
import ChapterPage from '@/pages/ChapterPage.vue'
import AuthorDashboard from '@/pages/AuthorDashboard.vue'
import AdminDashboard from '@/pages/AdminDashboard.vue'
import AuthorRegister from '@/pages/AuthorRegister.vue'
import ChatPage from '@/pages/ChatPage.vue'
import CustomerServicePage from '@/pages/CustomerServicePage.vue'
import ServiceDashboardPage from '@/pages/ServiceDashboardPage.vue'
import VipCenterPage from '@/pages/VipCenterPage.vue'

const routes = [
  // 小说相关页面
  { path: '/', name: 'home', component: HomePage },
  { path: '/novels', name: 'novels', component: HomePage },
  { path: '/novel/:id', name: 'novel-detail', component: NovelDetailPage },
  { path: '/novel/:novelId/chapter/:chapterId', name: 'chapter', component: ChapterPage },
  { path: '/author', name: 'author', component: AuthorDashboard },
  { path: '/author/register', name: 'author-register', component: AuthorRegister },
  { path: '/admin', name: 'admin', component: AdminDashboard },
  { path: '/vip', name: 'vip-center', component: VipCenterPage },
  
  // 聊天演示页
  { path: '/chat', name: 'chat', component: ChatPage },
  
  // 客服相关页面
  { path: '/customer-service', name: 'customer-service', component: CustomerServicePage },
  { path: '/service-dashboard', name: 'service-dashboard', component: ServiceDashboardPage },
  
  // 登录相关页面
  { path: '/login', name: 'login', component: UnifiedLogin },
  // 授权回调已下线
  // 旧登录与钉钉直连已移除
]

const router = createRouter({
  history: createWebHashHistory(),
  routes,
})

// 路由守卫 - 登录拦截 + 权限控制
router.beforeEach((to, from, next) => {
  const userStore = useUserStore()
  
  // ===== 处理钉钉登录回调：检测URL中的token参数 =====
  // 注意：hash路由的参数在hash中，需要从 to.query 或 window.location.hash 中获取
  // 检查是否已经在处理登录（避免重复处理）
  const hashParams = window.location.hash.split('?')[1] || ''
  const urlParams = new URLSearchParams(hashParams)
  const token = to.query.token || urlParams.get('token')
  const refreshToken = to.query.refreshToken || urlParams.get('refreshToken')
  const userParam = to.query.user || urlParams.get('user')
  const loginType = to.query.login_type || urlParams.get('login_type')
  
  // 只有在URL中有token参数且用户未登录时才处理（避免重复处理）
  if (token && loginType === 'dingtalk' && userParam && !userStore.isLoggedIn) {
    try {
      // 解析用户信息
      const user = JSON.parse(decodeURIComponent(userParam))
      
      console.log('[钉钉登录] 检测到token参数，开始处理登录...', { 
        token: token ? token.substring(0, 20) + '...' : null, 
        user 
      })
      
      // 保存token和用户信息到localStorage
      if (token) {
        localStorage.setItem('token', token)
        console.log('[钉钉登录] Token已保存到localStorage')
      }
      if (refreshToken) {
        localStorage.setItem('refresh_token', refreshToken)
      }
      if (user) {
        localStorage.setItem('user_info', JSON.stringify(user))
        console.log('[钉钉登录] 用户信息已保存到localStorage:', user)
      }
      
      // 更新 Pinia 状态（同步更新）
      userStore.login(token || refreshToken, user)
      
      // 验证状态是否更新成功
      console.log('[钉钉登录] 登录状态已更新:', {
        isLoggedIn: userStore.isLoggedIn,
        userInfo: userStore.userInfo,
        token: userStore.token ? userStore.token.substring(0, 20) + '...' : null
      })
      
      // 清除URL参数，避免token暴露在地址栏（关键：先清除URL参数）
      // 使用 window.history.replaceState 直接修改URL，不触发新的路由导航
      const cleanUrl = window.location.origin + window.location.pathname + window.location.hash.split('?')[0]
      window.history.replaceState({}, '', cleanUrl)
      
      // 直接继续路由，不再跳转（避免循环）
      next()
      return
    } catch (error) {
      console.error('[钉钉登录] 处理登录回调失败:', error)
      // 即使出错也继续，不阻塞路由
      next()
    }
  }
  
  // 公开路由（不需要登录即可访问）
  const publicRoutes = ['/login', '/']
  
  // 管理端路由（需要管理员权限）
  const adminRoutes = ['/admin']
  
  // 作者端路由（需要作者或管理员权限）
  // 注意：/author 允许普通用户进入，以展示"成为作者/实名认证"引导面板
  const authorRoutes = ['/author/register']
  
  // 如果是公开路由，直接放行
  if (publicRoutes.includes(to.path)) {
    next()
    return
  }
  
  // 检查登录状态
  if (!userStore.isLoggedIn) {
    console.log('未登录，跳转到登录页')
    next('/login')
    return
  }
  
  // 获取用户角色
  const userRole = userStore.userInfo?.role || 1
  
  // 权限检查
  if (adminRoutes.includes(to.path)) {
    // 访问管理端，需要角色3（管理员）
    if (userRole !== 3) {
      console.log('权限不足，当前角色:', userRole, '需要角色: 3')
      // 避免重复弹窗
      if (to.path !== from.path) {
        alert('您没有权限访问管理后台')
      }
      next('/') // 跳转到首页
      return
    }
  } else if (authorRoutes.includes(to.path)) {
    // 访问作者端，需要角色2（作者）或3（管理员）
    // 但作者注册页允许所有登录用户访问
    if (to.path === '/author/register') {
      // 作者注册页允许访问
      next()
      return
    }
    
    if (userRole !== 2 && userRole !== 3) {
      console.log('权限不足，当前角色:', userRole, '需要角色: 2 或 3')
      // 避免重复弹窗
      if (to.path !== from.path) {
        alert('您还不是作者，请先注册成为作者')
      }
      next('/author/register') // 跳转到作者注册页
      return
    }
  }
  
  // 通过所有检查，放行
  next()
})

export default router

